home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / telecomm / fnordadl / fn132src.zoo / citutil / readtbl.c < prev    next >
C/C++ Source or Header  |  1991-09-02  |  3KB  |  106 lines

  1. /*
  2.  * readtbl.c -- Read in cfg, roomTab, netTab, and logTab
  3.  *
  4.  * 90Jan31 AA    Modified readSysTab() to handle variable-sized structs
  5.  * 87Jun18 orc    Created.
  6.  */ 
  7.  
  8. #include "ctdl.h"
  9. #include "net.h"
  10. #include "config.h"
  11. #include "room.h"
  12. #include "log.h"
  13.  
  14. /*
  15.  * readSysTab() - load cfg, logTab, netTab, roomTab
  16.  */
  17.  
  18. struct config    cfg;            /* A buncha variables        */
  19. struct lTable    *logTab = NULL;
  20. struct netTable *netTab = NULL;
  21. struct rTable    *roomTab = NULL;
  22.  
  23. char *indextable = "ctdltabl.sys";
  24.  
  25. struct {
  26.     unsigned cfgSize;
  27.     unsigned logSize;
  28.     unsigned roomSize;
  29.     unsigned evtSize;
  30. } sysHeader;
  31.  
  32. /****************************************************************
  33.  *    ltread() reads in from file the important stuff        *
  34.  *    returns:    TRUE on success, else FALSE        *
  35.  ****************************************************************/
  36. static int
  37. ltread(block, size, fd)
  38. char *block;
  39. unsigned size;
  40. int fd;
  41. {
  42.     if (dread(fd, block, size) != size) {
  43.     fprintf(stderr,"could not read %u bytes\n",size);
  44.     dclose(fd);        /* orc 2-jan-87 */
  45.     return FALSE;
  46.     }
  47.     return TRUE;
  48. }
  49.  
  50. /*
  51.  ****************************************************************
  52.  * readSysTab()        load cfg, logTab, netTab, roomTab    *
  53.  ****************************************************************
  54.  */
  55. int
  56. readSysTab(kill)
  57. int kill;
  58. {
  59.     int fd, i;
  60.  
  61.     if ((fd = dopen(indextable, O_RDONLY)) < 0) {
  62.     printf("No %s\n", indextable);      /* Tsk, tsk! */
  63.     return FALSE;
  64.     }
  65.  
  66.     if (dread(fd,&sysHeader,sizeof sysHeader) != sizeof sysHeader) {
  67.     printf("%s header read\n",indextable);
  68.     dclose(fd);
  69.     return FALSE;
  70.     }
  71.  
  72.     if (!ltread(&cfg, (sizeof cfg), fd))
  73.     return FALSE;
  74.  
  75.     if (sysHeader.cfgSize != sizeof cfg
  76.             || sysHeader.evtSize != cfg.evtCount
  77.             || sysHeader.roomSize != sizeof(*roomTab) * MAXROOMS
  78.             || sysHeader.logSize != sizeof(*logTab) * cfg.logsize) {
  79.     printf("size mismatch in %s\n",indextable);
  80.     dclose(fd);
  81. /* "return FALSE;" changed to "exit(1);" by RH 90Mar20 */
  82.     exit(1);
  83.     }
  84.  
  85.     logTab = (struct lTable *) xmalloc(sysHeader.logSize);
  86.     if (!ltread(logTab, sysHeader.logSize, fd))
  87.     return FALSE;
  88.  
  89.     roomTab = (struct rTable *) xmalloc(sysHeader.roomSize);
  90.     if (!ltread(roomTab, sysHeader.roomSize, fd))
  91.     return FALSE;
  92.  
  93.     netTab = (struct netTable *) xmalloc(sizeof (*netTab) * cfg.netSize);
  94.     if (cfg.netSize > 0) {
  95.     for (i=0; i<cfg.netSize; i++) {
  96.         if (!ltread(&netTab[i], NT_SIZE, fd))
  97.         return FALSE;
  98.         netTab[i].Tshared = (struct netroom *) xmalloc(SR_BULK);
  99.         if (!ltread(netTab[i].Tshared, SR_BULK, fd))
  100.         return FALSE;
  101.     }
  102.     }
  103.     dclose(fd);
  104.     return TRUE;
  105. }
  106.